/**
 * 
 */
package com.monkeyboy.mytest.java8.future;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;


/**
 * future使用：
 * 不能解决多个异步之间数据共享和处理的复杂操作，这时候就需要使用completableFuture
 *
 * @author Gavin<br>
 * 2019年9月26日
 */
public class FutureDemo {
	
	public static void main(String[] args)  {
		
		ExecutorService executorService = Executors.newCachedThreadPool();
		System.out.println(System.currentTimeMillis() + " start");
		Future<String> futute = executorService.submit(FutureDemo::doSomeLongOperation);
		System.out.println(System.currentTimeMillis() + " : xxxx这里干其它的事情，不受线程阻塞");
		//上面的操作都是同时操作
		
		//String result = futute.get();//调用这个方法就会sleep 1秒钟，相当于把解放出来这个时间去做其它事情，大达增加系统吞吐量
		String result=null;
		try {
			result = futute.get(1,TimeUnit.SECONDS);//设置只等待1秒钟，避免无止境的等待下去
		} catch (Exception e) {
			System.out.println("等待太久了，请等哈重试");
			e.printStackTrace();
		}
		System.out.println(System.currentTimeMillis() + " " + result);
		
	}
	
	public static String doSomeLongOperation() throws InterruptedException {
		Thread.sleep(1000);
		return "123";
	}

}
